#include "lines.h"

void lineBresenham(int x0, int y0, int x1, int y1, fnPos_type SetPos)
{
    int dy = y1 - y0;
    int dx = x1 - x0;
    int stepx, stepy;

    if (dy < 0) { dy = -dy;  stepy = -1; } else { stepy = 1; }
    if (dx < 0) { dx = -dx;  stepx = -1; } else { stepx = 1; }
    dy <<= 1;                                                  // dy is now 2*dy
    dx <<= 1;                                                  // dx is now 2*dx

    SetPos(x0, y0);
    
	if (dx > dy) 
	{
        int fraction = dy - (dx >> 1);                         // same as 2*dy - dx
        while (x0 != x1) 
		{
            if (fraction >= 0) 
			{
                y0 += stepy;
                fraction -= dx;                                // same as fraction -= 2*dx
            }

            x0 += stepx;
            fraction += dy;                                    // same as fraction -= 2*dy
            SetPos(x0, y0);
        }
    } 
	else 
	{
        int fraction = dx - (dy >> 1);
        while (y0 != y1) 
		{
            if (fraction >= 0) 
			{
                x0 += stepx;
                fraction -= dy;
            }

            y0 += stepy;
            fraction += dx;
            SetPos(x0, y0);
        }
    }
}


